$(document).ready(function() {
    //表格自适应
    function resizeFnc(){
        var offsetBottom, divWidth;
        divWidth = $("#insSetListDiv").width();
        offsetBottom =  $(window).height() - $("#insSetListDiv").offset().top;
        $("#insSetListDiv").height(offsetBottom * 0.95);
        $("#pmSetListGrd").setGridWidth(divWidth * 0.85);
        $("#pmSetListGrd").setGridHeight(offsetBottom * 0.99 - 51);

    };
    resizeFnc();
    $(window).resize(function() {
        resizeFnc();
    });
	var VAL ={
        NORMAL : "0000000"  ,
        EVT_USER : $("#userId").text(),
        T_FBPBISTOL : 'FBPBISTOL',
        T_MTPTOOLINS : 'MTPTOOLINS',
        DISABLED_ATTR : {
            'disabled' : true
        },
        ENABLED_ATTR : {
            'disabled' : false
        }
    };

	var domObj = {
		W : $(window),
			
		$toolRunModeSel : $("#toolRunModeSel"),
		$toolIdSel : $("#toolIdSel"),
		$insTypeSel : $("#insTypeSel"),
		
		$from_date : $("#from_date"),
		$to_date : $("#to_date"),
		$insTypeSel : $("#insTypeSel"),
        $evt_seq_id     : $("#evt_seq_id"),
		$task_idDialog : $("#task_idDialog"),
		$INSPlanDialog_titleTxt : $("#INSPlanDialog_titleTxt"),
		$INSPlanDialog_insDateDatepicker : $("#INSPlanDialog_insDateDatepicker"),
		$INSPlanDialog_insEndDateDatepicker : $("#INSPlanDialog_insEndDateDatepicker"),
		$insUpdateDate : $("#insUpdateDate"),
		$insEndDate : $("#insEndDate"),
		$ins_typeDialog : $("#ins_typeDialog"),
		$ins_routeDialog : $("#ins_routeDialog"),

		buttons : {

			$query_btn : $("#query_btn"),
			$add_btn : $("#add_btn"),
			$import_btn : $("#import_btn"),
			// $export_btn : $("#export_btn"),
			$download_btn : $("#download_btn"),
            $select_btn : $("#select_btn"),
            $save_btn : $("#save_btn"),

			$INSPlanDialog_cancelBtn : $("#INSPlanDialog_cancelBtn"),
			$INSPlanDialog_saveBtn : $("#INSPlanDialog_saveBtn"),
			$INSPlanDialog_deleteBtn : $("#INSPlanDialog_deleteBtn"),
		},
		
        grids:{
            $insSetListDiv : $("#insSetListDiv"),
            $insSetListGrd : $("#insSetListGrd"),
            $insSetListPg : $("#insSetListPg"),
        }
	};
	
	var controlsFunc={
	   	resizeFunc : function(){ 
	    	comResize(domObj.W, domObj.grids.$insSetListDiv, domObj.grids.$insSetListGrd);
	    },

    	//初始化界面点巡检类型
    	iniInsTypeFunc : function(){
        		comAddValueByDataCateFnc("#insTypeSel", "PITY", "ext_1", "data_desc", true);
    	},

	    //初始化dialog中点巡检类型
	    initInsTypeDailogFunc : function(){
            comAddValueByDataCateFnc("#ins_typeDialog", "PITY", "ext_1", "data_desc", true);
		},

	    //TODO 初始化巡检路线
		initInsRoute : function (){

		},
	    /**
    	 * 增加修改和删除按钮
    	 * 说明:(1) addGridButton :在Grid中添加了两个Button: "修改" , "删除"
    	 *     (2) modifyFnc     :点击修改时,调用此函数.
    	 *     (3) deleteFnc     :点击删除时,调用此函数.
    	 */
    	addGridButton : function(){
    		var ids = domObj.grids.$insSetListGrd.jqGrid('getDataIDs');
    		for(var i=0; i<ids.length; i++){
    			var id=ids[i];   
    			var modify = "<button id=" + "'Mod" + ids[i] + "'" + " style='color:#f60'>修改/删除</button>";  
    			domObj.grids.$insSetListGrd.jqGrid('setRowData', ids[i], { modifyItem: modify});
    			$("#Mod" + ids[i]).click( controlsFunc.modifyFunc );
    		}  
    	},
    	modifyFunc : function(){
    		domObj.buttons.$INSPlanDialog_saveBtn.data("action_flg","U");
    		controlsFunc.iniDialogFunc(this.id.substr(3));
    		return false;
    	},
    	/***************************初始化保养计划Dialog***************************/
    	iniDialogFunc : function(id){
		      /*****
	        当多次弹出对话框的同时也会多次绑定click事件。
	        解决办法: 在show Dialog时将click unbind全部掉
	                  然后再绑定，这样就只剩下一个click事件了。
	      **********/
    		var action_flg = domObj.buttons.$INSPlanDialog_saveBtn.data("action_flg");
		    $("#INSPlanDialog").unbind('shown.bs.modal');
		    domObj.buttons.$INSPlanDialog_saveBtn.unbind('click');
		    domObj.buttons.$INSPlanDialog_deleteBtn.unbind('click');
		    controlsFunc.iniDateTimePicker();
	  		if(action_flg == "A"){
	  			domObj.$INSPlanDialog_titleTxt.text("新增点巡检任务计划");
                $("#nowInsDate").attr("style","display:none;");//将当前保养开始日期隐藏
                $("#endInsDate").attr("style","display:none;");//将当前保养结束日期隐藏
	  			domObj.buttons.$INSPlanDialog_deleteBtn.hide();
	  			domObj.$ins_typeDialog.attr(VAL.ENABLED_ATTR);
				controlsFunc.initInsTypeDailogFunc();
	  		}else{
	  			domObj.$INSPlanDialog_titleTxt.text("修改/删除点巡检任务计划");
                $("#nowInsDate").attr("style","display:show();");//将当前保养开始日期显示
                $("#endInsDate").attr("style","display:show();");//将当前保养结束日期显示
	  			domObj.buttons.$INSPlanDialog_deleteBtn.show();
	  			// domObj.$ins_typeDialog.attr(VAL.DISABLED_ATTR);
                $("#INSPlanDialog_dataCateForm select").empty();
                controlsFunc.initInsTypeDailogFunc();
	      		var rowData  = domObj.grids.$insSetListGrd.jqGrid("getRowData",id);
                domObj.$INSPlanDialog_insDateDatepicker.val(rowData.from_date);
                domObj.$INSPlanDialog_insEndDateDatepicker.val(rowData.to_date);
                $("#INSPlanDialog_insSeqIdSpan").text(rowData.evt_seq_id);
	      		//domObj.$PMPlanDialog_pmDateDatepicker.data("datetimepicker").setLocalDate(new Date(rowData.from_date));
	  			$("#task_idDialog").text(rowData.ins_task_seq_id);
	  			SelectDom.setSelect($("#ins_typeDialog"),rowData.ins_type,rowData.ins_type);
	      		//选中保养计划已经设定保养项目
	      		// controlsFunc.iniPlanItemFunc();
	  		}

      		$("#INSPlanDialog_dataCateForm select").select2({
    			theme : "bootstrap",
    	        width : domObj.W.width()* 0.12
    	    });
      		domObj.buttons.$INSPlanDialog_saveBtn.bind('click', btnFunc.dialogSaveFunc);
      		domObj.buttons.$INSPlanDialog_deleteBtn.bind('click', btnFunc.dialogDeleteFunc);
		    $("#INSPlanDialog").modal('show');
    	},
		iniDateTimePicker : function() {
            laydate.render({
                elem: '#insUpdateDate',
                type: 'datetime'
            });
            laydate.render({
                elem: '#insEndDate',
                type: 'datetime'
            });

            laydate.render({
                elem: '#from_date',
                type: 'datetime'
            });
            laydate.render({
                elem: '#to_date',
                type: 'datetime'
            });
        },

    	iniDialogPmTypeFunc : function(){
			domObj.$PMPlanDialog_pmTypeSel.empty();
			domObj.grids.$pmItemListGrd.jqGrid("clearGridData");
    		var toolId = $.trim(domObj.$PMPlanDialog_toolIdSel.val());
    		if(toolId){
    	        var inTrxObj = {
    	 				trx_id     : VAL.T_MTPPMITEM ,
    	 				action_flg : 'T'        ,
    	 				tool_id    : toolId
    	 		};
    	 		var outTrxObj = comTrxSubSendPostJson(inTrxObj);
    	 		if( outTrxObj.rtn_code == _NORMAL ) {
    	 			SelectDom.addSelectArr(domObj.$PMPlanDialog_pmTypeSel, outTrxObj.oaryA, "pm_type_fk","pm_type_dsc",true, true);
    	 		}
    		}
    		domObj.$PMPlanDialog_pmTypeSel.select2({
    			theme : "bootstrap",
    	        width : domObj.W.width()* 0.12
    	    });
    	}

	};
	
	var btnFunc = {
		queryFunc : function(){//查询设备对应的保养计划
			var insTypeId = $.trim(domObj.$insTypeSel.val());
			var from_date = $.trim(domObj.$from_date.val());
			var to_date = $.trim(domObj.$to_date.val());
			var inTrxObj = {
	 				trx_id     : VAL.T_MTPTOOLINS ,
	 				action_flg : 'F'        ,
	 				evt_usr    : VAL.EVT_USER
	 		};
			
			if(insTypeId){
				inTrxObj.ins_type = insTypeId;
			}
            if(from_date){
                inTrxObj.from_date = from_date;
            }
            if(to_date){
                inTrxObj.to_date = to_date;
            }

	 		var outTrxObj = comTrxSubSendPostJson(inTrxObj);
	 		if( outTrxObj.rtn_code == _NORMAL ) {
	 			setGridInfo(outTrxObj.oaryA,"#insSetListGrd");
	 			controlsFunc.addGridButton();
	 		}
		},
		addFunc : function(){
			domObj.buttons.$INSPlanDialog_saveBtn.data("action_flg","A");
		    controlsFunc.iniDialogFunc();
		},

		//保养计划Dialog保存按钮
		dialogSaveFunc : function(){
			var iaryA = new Array();
			var action_flg = domObj.buttons.$INSPlanDialog_saveBtn.data("action_flg");
			var ins_type = $.trim(domObj.$ins_typeDialog.val());
            if(action_flg=="A"){//添加
               var ins_date_start = $.trim(domObj.$insUpdateDate.val());
               var ins_date_end   = $.trim(domObj.$insEndDate.val());
                if(!ins_date_start){
                    showErrorDialog("", "点巡检计划开始日期不能为空！");
                    return false;
                }
                if(!ins_date_end){
                    showErrorDialog("", "点巡检计划结束日期不能为空！");
                    return false;
                }

                var insDateStart  = ins_date_start.replace("-","/");//替换字符，变成标准格式
                var insDateEnd  = ins_date_end.replace("-","/");//替换字符，变成标准格式
                var d1 = new Date(Date.parse(insDateStart));
                var d2 = new Date(Date.parse(insDateEnd));
                if(d1>d2){
                   showErrorDialog("","点巡检计划开始时间 不能大于 点巡检计划结束时间！");
                   return false;
                }

            }else {//修改
               var ins_date_start = $.trim(domObj.$insUpdateDate.val());
               var ins_date_end   = $.trim(domObj.$insEndDate.val());
               var ins_old_start = $.trim(domObj.$INSPlanDialog_insDateDatepicker.val());
               var ins_old_end   = $.trim(domObj.$INSPlanDialog_insEndDateDatepicker.val());
               if((!ins_date_start && ins_date_end) || (ins_date_start && !ins_date_end)){
               	showErrorDialog("","点巡检计划开始时间和点巡检计划结束时间必须同时选择！");
               	return false;
			   }
			   if(ins_date_start && ins_date_end){
                   var insDateStart  = ins_date_start.replace("-","/");//替换字符，变成标准格式
                   var insDateEnd  = ins_date_end.replace("-","/");//替换字符，变成标准格式
                   var d1 = new Date(Date.parse(insDateStart));
                   var d2 = new Date(Date.parse(insDateEnd));
                   if(d1>d2){
                       showErrorDialog("","点巡检计划开始时间 不能大于 点巡检计划结束时间！");
                       return false;
                   }
			   }
            }
			
			if(!ins_type){
				showErrorDialog("", "点巡检类型不能为空！");
				return false;
			}


			var inTrxObj ={
      			  trx_id     : VAL.T_MTPTOOLINS,
      			  action_flg : action_flg,
      			  ins_type    : ins_type,
      			  from_date  : ins_old_start,
                  to_date: ins_old_end,
                  ins_start_time: ins_date_start,
                  ins_end_time :ins_date_end,
      			  evt_seq_id  : $.trim($("#INSPlanDialog_insSeqIdSpan").text()),
      			  evt_usr    : VAL.EVT_USER,
      			  // iaryA      : iaryA
    		};
			
			var outTrxObj = comTrxSubSendPostJson(inTrxObj);
			if( outTrxObj.rtn_code == _NORMAL ) {
				showSuccessDialog("点巡检任务保存成功");
				btnFunc.queryFunc();
			}
			
		},

		//TODO 保存excel导入的点巡检任务
		saveExcelFunc : function(){
            var rowIDs = domObj.grids.$insSetListGrd.jqGrid('getDataIDs');
            var iaryAList = [];
            for(var i=0;i<rowIDs.length;i++){
                var rowData = domObj.grids.$insSetListGrd.jqGrid("getRowData",rowIDs[i]);
                if(!rowData.from_date){
                    showErrorDialog("", "点巡检任务开始日期不能为空！");
                    return false;
                }
                if(!rowData.to_date){
                    showErrorDialog("", "点巡检任务结束日期不能为空！");
                    return false;
                }
                if(!rowData.ins_type){
                    showErrorDialog("", "点巡检类型不能为空！");
                    return false;
                }
                var iaryA ={
                    evt_seq_id  : $.trim($("#INSPlanDialog_insSeqIdSpan").text()),
                   ins_date_start : rowData.from_date,
                   ins_date_end : rowData.to_date,
                   ins_type : rowData.ins_type,}
                iaryAList.push(iaryA);
                }



            var inTrxObj ={
                trx_id     : VAL.T_MTPTOOLINS,
                action_flg : "Z",
                evt_usr    : VAL.EVT_USER,
                iaryA      : iaryAList
            };

            var outTrxObj = comTrxSubSendPostJson(inTrxObj);
            if( outTrxObj.rtn_code == _NORMAL ) {
                showSuccessDialog("点巡检任务保存成功");
                btnFunc.queryFunc();
            }
		},

		//保养计划删除
		dialogDeleteFunc : function(){
			var iaryA = new Array();
			/*var pm_date = $.trim(domObj.$PMPlanDialog_pmDateDatepicker.data("datetimepicker").getLocalDate().format('yyyy-MM-dd'));*/
            var ins_old_start = $.trim(domObj.$INSPlanDialog_insDateDatepicker.val());
            // var ins_old_end = $.trim(domObj.$INSPlanDialog_insEndDateDatepicker.val());
			var ins_type = $.trim(domObj.$ins_typeDialog.val());
			// if(!ins_old_start){
			// 	showErrorDialog("", "点巡检任务开始日期不能为空！");
			// 	return true;
			// }

            // if(!ins_old_end){
            //     showErrorDialog("", "点巡检任务结束日期不能为空！");
            //     return true;
            // }
			
			if(!ins_type){
				showErrorDialog("", "点巡检类型不能为空！");
				return true;
			}

			var inTrxObj ={
      			  trx_id     : VAL.T_MTPTOOLINS,
      			  action_flg : 'D',
      			  ins_type    : ins_type,
      			  // from_date  : ins_old_start,
      			  // end_date : ins_old_end,
      			  evt_seq_id  : $.trim($("#INSPlanDialog_insSeqIdSpan").text()),
      			  evt_usr    : VAL.EVT_USER
    		};
			
			var outTrxObj = comTrxSubSendPostJson(inTrxObj);
			if( outTrxObj.rtn_code == _NORMAL ) {
				showSuccessDialog("点巡检任务删除成功");
				btnFunc.queryFunc();
			}
			$("#INSPlanDialog").modal('hide');
		},

        selectFileFunc  :function(){
            domObj.buttons.$select_btn.click();
        },

        downloadTempFun: function () {
            if ($("#downForm").length > 0) {
                $("#downForm").remove();
            }
            var str = '<form id="downForm" action="download.do" method="post">';
            str = str + '<input type="hidden" name="fileName" id= "fileName" />';
            str = str + "</form>";
            $(str).appendTo("body");
            $("#fileName").val("3S20.xlsx");
            $("#downForm").submit();
        },

        uploadFnc : function(obj){
            //清空jqgrid里面的数据
            domObj.grids.$insSetListGrd.jqGrid("clearGridData");
			/*
			 FileReader共有4种读取方法：
			 1.readAsArrayBuffer(file)：将文件读取为ArrayBuffer。
			 2.readAsBinaryString(file)：将文件读取为二进制字符串
			 3.readAsDataURL(file)：将文件读取为Data URL
			 4.readAsText(file, [encoding])：将文件读取为文本，encoding缺省值为'UTF-8'
			 */
            var wb;//读取完成的数据
            var rABS = true; //是否将文件读取为二进制字符串
            if(!obj.files) {
                return;
            }
            var fileName = obj.value;
            if(fileName.length > 1 && fileName ) {
                var ldot = fileName.lastIndexOf(".");
                var type = fileName.substring(ldot + 1);
                if(!(type=="xlsx"||type=="xls")) {
                    showErrorDialog("", "只能导入excel文件");
                    return;
                }
            }
            var f = obj.files[0];
            var reader = new FileReader();
            reader.onload = function(e) {
                var data = e.target.result;
                if(rABS) {
                    wb = XLSX.read(btoa(fixdata(data)), {//手动转化
                        type: 'base64'
                    });
                } else {
                    wb = XLSX.read(data, {
                        type: 'binary'
                    });
                }
                //wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
                //wb.Sheets[Sheet名]获取第一个Sheet的数据
                var data = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
                data = JSON.parse(JSON.stringify(data).replace(/点巡检任务开始日期/g,"from_date"));
                data = JSON.parse(JSON.stringify(data).replace(/点巡检任务结束日期/g,"to_date"));
                data = JSON.parse(JSON.stringify(data).replace(/点巡检类型/g,"ins_type"));
				for(var i = 0; i < data.length; i++){
					var dataValue = data[i];
					var from_date = dataValue.from_date.replace(/\//g,"-") + " " +"00:00:00" ;
					var to_date = dataValue.to_date.replace(/\//g,"-") + " " + "00:00:00";
					data[i].from_date = from_date;
					data[i].to_date = to_date;
				}
                setGridInfo(data, domObj.grids.$insSetListGrd);
                controlsFunc.addGridButton();
            };
            if(rABS) {
                reader.readAsArrayBuffer(f);
            } else {
                reader.readAsBinaryString(f);
            }
            function fixdata(data) { //文件流转BinaryString
                var o = "", l = 0, w = 10240;
                for(; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
                o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
                return o;
            }
        },
        exportFunc : function(){
            exportExcel("#SetListGrd");
        },

	};

    function iniGridInfo() {
    	var insSetListInfoCM = [
    	    {name: 'modifyItem'   , index: 'modifyItem'    , label: "修改/删除"    , sortable: false  ,width: 100 },
            {name: 'evt_seq_id'    , index: 'evt_seq_id'   , label: "任务ID"      , sortable: false  ,width: 170,hidden:true },
     	    {name: 'from_date'      , index: 'from_date'     , label: "点巡检任务开始日期"     , sortable: false  ,width: 220 },
     	    {name: 'to_date'      , index: 'to_date'     , label: "点巡检任务结束日期"     , sortable: false  ,width: 220 },
     	    {name: 'ins_type'     , index: 'ins_type'    , label: "点巡检类型"      , sortable: false  ,width: 170 },
     	    {name: 'ins_task_stat'     , index: 'ins_task_stat'    , label: "任务状态"      , sortable: false  ,width: 170 },
     	    {name: 'ins_route'    , index: 'ins_route'   , label: "巡检路线"      , sortable: false  ,width: 170 },
     	    {name: 'ins_task_seq_id'      , index: 'ins_task_seq_id'     , label: ""        , sortable: false  ,width: 1, hidden:true }
     	];
     	domObj.grids.$insSetListGrd.jqGrid({
     		  url:"",
     	      datatype:"local",
     	      mtype:"POST",
     	      autowidth:true,//宽度根据父元素自适应
              shrinkToFit:false,
              autoScroll: false,
     	      scroll:false,
     	      resizable : true,
     	      loadonce:true,
     	      fixed: true,
     	      viewrecords : true, //显示总记录数
     	      pager : '#insSetListPg',
     	      rownumbers  :true ,//显示行号
     	      pginput  : false ,
     	      rownumWidth : 20,  //行号列宽度
     	      emptyrecords :true ,
     	      colModel: insSetListInfoCM
     	});
    }
    
    /**
     * Ini contorl's data
     */
    var iniContorlData = function(){
    	controlsFunc.resizeFunc();
    	controlsFunc.iniInsTypeFunc();
    	controlsFunc.initInsTypeDailogFunc();
    	controlsFunc.iniDateTimePicker();
    };
    
    /**
     * Bind button click action
     */
    var iniButtonAction = function(){
    	domObj.buttons.$query_btn.click(function(){
    		btnFunc.queryFunc();
    	});

    	domObj.buttons.$add_btn.click(function(){
    		btnFunc.addFunc();
    	});
    	
    	// domObj.buttons.$PMPlanDialog_addBtn.click(function(){
        	// controlsFunc.iniItemDialogFunc("A");
    	// });

        domObj.buttons.$import_btn.click(function(){
            btnFunc.selectFileFunc();
        });

        domObj.buttons.$select_btn.change(function() {
            btnFunc.uploadFnc(this);
        });

        domObj.buttons.$download_btn.click(function(){
            btnFunc.downloadTempFun();
        });

        domObj.buttons.$save_btn.click(function(){
			btnFunc.saveExcelFunc();
		});


    };
    
    /**
     * Other action bind
     */
    var otherActionBind = function(){
	    $("form").submit(function(){
	        return false;
	    });
	    
	    domObj.W.resize(function() {
	    	controlsFunc.resizeFunc();
    	});

        // domObj.buttons.$export_btn.click(function(){
        //     btnFunc.exportFunc();
        // });
    };

    /**
     * Ini view, data and action bind
     */
    var initializationFunc = function(){
    	iniGridInfo();
    	iniContorlData();
    	iniButtonAction();
    	otherActionBind();
    };
    
    initializationFunc();
});